/**
 * TDS PEC 4
 * Grupo 3H2M
 *
 * El paquete <code>edu.uoc.tds.pec4.server.bbdd</code> agrupa todos los
 * interfaces y clases que encapsulan los objetos de acceso a datos (DAO),para
 * realizar el acceso a datos. La base de datos es PostgreSQL.
 */
package edu.uoc.tds.pec4.server.bbdd;

import edu.uoc.tds.pec4.beans.AulaDTO;
import edu.uoc.tds.pec4.beans.LocalizacionDTO;
import edu.uoc.tds.pec4.beans.ReservaDTO;
import edu.uoc.tds.pec4.common.filters.FiltroFechasHoras;
import edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException;
import java.util.List;

/**
 * El interfaz <code>IReservaDAO</code> es el componente de software que suministra
 * una interfaz común entre la aplicación y la base de datos, relacionada con los
 * servicios del subsistema Aulas para la gestión de reservas.<br />
 * Extiende la clase <code>DataBaseDAO</code><br />
 * Es el interfaz común que todas las implementaciones de IReservaDAO deben cumplir.<br />
 *
 * @author	Silvia López Ruiz
 * @author	Luis Rodríguez-Manzaneque Sánchez
 * @version	08/12/2011
 * @since	1.00
 * @see         edu.uoc.tds.pec4.server.bbdd.exceptions.DataBaseDAOException
 */
public interface IReservaDAO {

    /**
     * Devuelve la lista de aulas libres para unas fechas y ciudad determinadas
     * @return  La lista de las aulas libres para el filtro especificado
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public List<AulaDTO> listaAulasLibres(int idCiudad, FiltroFechasHoras fechasHoras) 
            throws DataBaseDAOException;

    /**
     * Método que permite dar de alta la reserva de un espacio.
     * @param   reserva La reserva a dar de alta en la BBDD
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public void insertarReserva(ReservaDTO reserva) throws DataBaseDAOException;
    
    public void actualizarImporteReserva(ReservaDTO reserva) throws DataBaseDAOException;
    
    public ReservaDTO getReserva(int idReserva) throws DataBaseDAOException;
    
    public ReservaDTO getDetalleReserva(int idReserva) throws DataBaseDAOException;
    /**
     * Obtiene un listado de la base de datos con todas las reservas que cumplen
     * con los filtros establecidos.
     * @param pais      El país por el que se quiere filtrar
     * @param provincia La provincia por la que se quiere filtrar
     * @param ciudad    La ciudad por la que se quiere filtrar
     * @param estados   Un array con la lista de los estados de la reserva
     * @return La lista de las solicitudes filtradas por localización,
     * y/o estados
     * @throws  DataBaseDAOException En caso de generarse una excepción de acceso
     *          a la base de datos se dispara al nivel superior
     */
    public List<ReservaDTO> listaReservas(LocalizacionDTO local,
            List<Integer> estados, String FechaDesde, String FechaHasta) throws DataBaseDAOException;

}

